{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "# Ignore numpy dtype warnings. These warnings are caused by an interaction\n",
    "# between numpy and Cython and can be safely ignored.\n",
    "# Reference: https://stackoverflow.com/a/40846742\n",
    "warnings.filterwarnings(\"ignore\", message=\"numpy.dtype size changed\")\n",
    "warnings.filterwarnings(\"ignore\", message=\"numpy.ufunc size changed\")\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "import ipywidgets as widgets\n",
    "from ipywidgets import interact, interactive, fixed, interact_manual\n",
    "import nbinteract as nbi\n",
    "\n",
    "sns.set()\n",
    "sns.set_context('talk')\n",
    "np.set_printoptions(threshold=20, precision=2, suppress=True)\n",
    "pd.options.display.max_rows = 7\n",
    "pd.options.display.max_columns = 8\n",
    "pd.set_option('precision', 2)\n",
    "# This option stops scientific notation for pandas\n",
    "# pd.set_option('display.float_format', '{:.2f}'.format)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "L2sHqTw23zbC"
   },
   "source": [
    "# Hypothesis Testing and Confidence Intervals\n",
    "\n",
    "In this section, we provide a brief review of hypothesis testing using the bootstrap and permutation tests. We assume familiarity with this topic since it is covered at length in Computational and Inferential Thinking, the textbook for Data 8. For a more thorough explanation of the concepts explained here, see [Chapter 11](https://www.inferentialthinking.com/chapters/11/Testing_Hypotheses), [Chapter 12](https://www.inferentialthinking.com/chapters/12/Comparing_Two_Samples), and [Chapter 13](https://www.inferentialthinking.com/chapters/13/Estimation) of Computational and Inferential Thinking."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "L2sHqTw23zbC"
   },
   "source": [
    "## Hypothesis Tests\n",
    "\n",
    "When applying data science techniques to different domains, we are often faced with questions about the world. For example, does drinking coffee cause sleep deprivation? Do autonomous vehicles crash more often then non-autonomous vehicles? Does drug X help treat pneumonia? To help answer these questions, we use hypothesis tests to make informed conclusions based on observed evidence/data.\n",
    "\n",
    "Since data collection is often an imprecise process, we are often unsure whether the patterns in our dataset are due to noise or real phenomena. Hypothesis testing helps us determine whether a pattern could have happened because of random fluctuations in our data collection.\n",
    "\n",
    "To explore hypothesis testing, we start with an example. The table `baby` contains information on baby weights at birth. It records the baby's birth weight in ounces and whether or not the mother smoked during pregnancy for 1174 babies."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 256,
     "resources": {
      "http://localhost:8080/nbextensions/google.colab/files.js": {
       "data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7Ci8vIE1heCBhbW91bnQgb2YgdGltZSB0byBibG9jayB3YWl0aW5nIGZvciB0aGUgdXNlci4KY29uc3QgRklMRV9DSEFOR0VfVElNRU9VVF9NUyA9IDMwICogMTAwMDsKCmZ1bmN0aW9uIF91cGxvYWRGaWxlcyhpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IHN0ZXBzID0gdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKTsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIC8vIENhY2hlIHN0ZXBzIG9uIHRoZSBvdXRwdXRFbGVtZW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBjYWxsCiAgLy8gdG8gdXBsb2FkRmlsZXNDb250aW51ZSBmcm9tIFB5dGhvbi4KICBvdXRwdXRFbGVtZW50LnN0ZXBzID0gc3RlcHM7CgogIHJldHVybiBfdXBsb2FkRmlsZXNDb250aW51ZShvdXRwdXRJZCk7Cn0KCi8vIFRoaXMgaXMgcm91Z2hseSBhbiBhc3luYyBnZW5lcmF0b3IgKG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgeWV0KSwKLy8gd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGFzeW5jaHJvbm91cyBzdGVwcyBhbmQgdGhlIFB5dGhvbiBzaWRlIGlzIGdvaW5nCi8vIHRvIHBvbGwgZm9yIGNvbXBsZXRpb24gb2YgZWFjaCBzdGVwLgovLyBUaGlzIHVzZXMgYSBQcm9taXNlIHRvIGJsb2NrIHRoZSBweXRob24gc2lkZSBvbiBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcCwKLy8gdGhlbiBwYXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgc3RlcCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQgc3RlcC4KZnVuY3Rpb24gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpIHsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIGNvbnN0IHN0ZXBzID0gb3V0cHV0RWxlbWVudC5zdGVwczsKCiAgY29uc3QgbmV4dCA9IHN0ZXBzLm5leHQob3V0cHV0RWxlbWVudC5sYXN0UHJvbWlzZVZhbHVlKTsKICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5leHQudmFsdWUucHJvbWlzZSkudGhlbigodmFsdWUpID0+IHsKICAgIC8vIENhY2hlIHRoZSBsYXN0IHByb21pc2UgdmFsdWUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlIG5leHQKICAgIC8vIHN0ZXAgb2YgdGhlIGdlbmVyYXRvci4KICAgIG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSA9IHZhbHVlOwogICAgcmV0dXJuIG5leHQudmFsdWUucmVzcG9uc2U7CiAgfSk7Cn0KCi8qKgogKiBHZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJldHdlZW4gZWFjaCBhc3luYyBzdGVwIG9mIHRoZSB1cGxvYWQKICogcHJvY2Vzcy4KICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWQgRWxlbWVudCBJRCBvZiB0aGUgaW5wdXQgZmlsZSBwaWNrZXIgZWxlbWVudC4KICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIG91dHB1dCBkaXNwbGF5LgogKiBAcmV0dXJuIHshSXRlcmFibGU8IU9iamVjdD59IEl0ZXJhYmxlIG9mIG5leHQgc3RlcHMuCiAqLwpmdW5jdGlvbiogdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKSB7CiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CgogIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CiAgb3V0cHV0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsKCiAgY29uc3QgcGlja2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBpbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgcmVzb2x2ZShlLnRhcmdldC5maWxlcyk7CiAgICB9KTsKICB9KTsKCiAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgaW5wdXRFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsIHVwbG9hZCc7CiAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjYW5jZWwub25jbGljayA9ICgpID0+IHsKICAgICAgcmVzb2x2ZShudWxsKTsKICAgIH07CiAgfSk7CgogIC8vIENhbmNlbCB1cGxvYWQgaWYgdXNlciBoYXNuJ3QgcGlja2VkIGFueXRoaW5nIGluIHRpbWVvdXQuCiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9LCBGSUxFX0NIQU5HRV9USU1FT1VUX01TKTsKICB9KTsKCiAgLy8gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcGljayB0aGUgZmlsZXMuCiAgY29uc3QgZmlsZXMgPSB5aWVsZCB7CiAgICBwcm9taXNlOiBQcm9taXNlLnJhY2UoW3BpY2tlZFByb21pc2UsIHRpbWVvdXRQcm9taXNlLCBjYW5jZWxQcm9taXNlXSksCiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdzdGFydGluZycsCiAgICB9CiAgfTsKCiAgaWYgKCFmaWxlcykgewogICAgcmV0dXJuIHsKICAgICAgcmVzcG9uc2U6IHsKICAgICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICAgIH0KICAgIH07CiAgfQoKICBjYW5jZWwucmVtb3ZlKCk7CgogIC8vIERpc2FibGUgdGhlIGlucHV0IGVsZW1lbnQgc2luY2UgZnVydGhlciBwaWNrcyBhcmUgbm90IGFsbG93ZWQuCiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKCiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICBsaS5hcHBlbmQoc3BhbihmaWxlLm5hbWUsIHtmb250V2VpZ2h0OiAnYm9sZCd9KSk7CiAgICBsaS5hcHBlbmQoc3BhbigKICAgICAgICBgKCR7ZmlsZS50eXBlIHx8ICduL2EnfSkgLSAke2ZpbGUuc2l6ZX0gYnl0ZXMsIGAgKwogICAgICAgIGBsYXN0IG1vZGlmaWVkOiAkewogICAgICAgICAgICBmaWxlLmxhc3RNb2RpZmllZERhdGUgPyBmaWxlLmxhc3RNb2RpZmllZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbi9hJ30gLSBgKSk7CiAgICBjb25zdCBwZXJjZW50ID0gc3BhbignMCUgZG9uZScpOwogICAgbGkuYXBwZW5kQ2hpbGQocGVyY2VudCk7CgogICAgb3V0cHV0RWxlbWVudC5hcHBlbmRDaGlsZChsaSk7CgogICAgY29uc3QgZmlsZURhdGFQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7CiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7CiAgICB9KTsKICAgIC8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5LgogICAgbGV0IGZpbGVEYXRhID0geWllbGQgewogICAgICBwcm9taXNlOiBmaWxlRGF0YVByb21pc2UsCiAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgYWN0aW9uOiAnY29udGludWUnLAogICAgICB9CiAgICB9OwoKICAgIC8vIFVzZSBhIGNodW5rZWQgc2VuZGluZyB0byBhdm9pZCBtZXNzYWdlIHNpemUgbGltaXRzLiBTZWUgYi82MjExNTY2MC4KICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBmaWxlRGF0YS5ieXRlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZpbGVEYXRhLmJ5dGVMZW5ndGggLSBwb3NpdGlvbiwgTUFYX1BBWUxPQURfU0laRSk7CiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZmlsZURhdGEsIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CgogICAgICBjb25zdCBiYXNlNjQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICAgICAgeWllbGQgewogICAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgICBhY3Rpb246ICdhcHBlbmQnLAogICAgICAgICAgZmlsZTogZmlsZS5uYW1lLAogICAgICAgICAgZGF0YTogYmFzZTY0LAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPQogICAgICAgICAgYCR7TWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCl9JSBkb25lYDsKICAgIH0KICB9CgogIC8vIEFsbCBkb25lLgogIHlpZWxkIHsKICAgIHJlc3BvbnNlOiB7CiAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgIH0KICB9Owp9CgpzY29wZS5nb29nbGUgPSBzY29wZS5nb29nbGUgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYiA9IHNjb3BlLmdvb2dsZS5jb2xhYiB8fCB7fTsKc2NvcGUuZ29vZ2xlLmNvbGFiLl9maWxlcyA9IHsKICBfdXBsb2FkRmlsZXMsCiAgX3VwbG9hZEZpbGVzQ29udGludWUsCn07Cn0pKHNlbGYpOwo=",
       "headers": [
        [
         "content-type",
         "application/javascript"
        ]
       ],
       "ok": true,
       "status": 200,
       "status_text": ""
      }
     }
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 5666,
     "status": "ok",
     "timestamp": 1530931520737,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "DjN4D5Qc32Zg",
    "outputId": "d1f1994f-2c14-43e3-e8f5-b42504121e3b",
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [],
   "source": [
    "baby = pd.read_csv('baby.csv')\n",
    "baby = baby.loc[:, [\"Birth Weight\", \"Maternal Smoker\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 256,
     "resources": {
      "http://localhost:8080/nbextensions/google.colab/files.js": {
       "data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7Ci8vIE1heCBhbW91bnQgb2YgdGltZSB0byBibG9jayB3YWl0aW5nIGZvciB0aGUgdXNlci4KY29uc3QgRklMRV9DSEFOR0VfVElNRU9VVF9NUyA9IDMwICogMTAwMDsKCmZ1bmN0aW9uIF91cGxvYWRGaWxlcyhpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IHN0ZXBzID0gdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKTsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIC8vIENhY2hlIHN0ZXBzIG9uIHRoZSBvdXRwdXRFbGVtZW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBjYWxsCiAgLy8gdG8gdXBsb2FkRmlsZXNDb250aW51ZSBmcm9tIFB5dGhvbi4KICBvdXRwdXRFbGVtZW50LnN0ZXBzID0gc3RlcHM7CgogIHJldHVybiBfdXBsb2FkRmlsZXNDb250aW51ZShvdXRwdXRJZCk7Cn0KCi8vIFRoaXMgaXMgcm91Z2hseSBhbiBhc3luYyBnZW5lcmF0b3IgKG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgeWV0KSwKLy8gd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGFzeW5jaHJvbm91cyBzdGVwcyBhbmQgdGhlIFB5dGhvbiBzaWRlIGlzIGdvaW5nCi8vIHRvIHBvbGwgZm9yIGNvbXBsZXRpb24gb2YgZWFjaCBzdGVwLgovLyBUaGlzIHVzZXMgYSBQcm9taXNlIHRvIGJsb2NrIHRoZSBweXRob24gc2lkZSBvbiBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcCwKLy8gdGhlbiBwYXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgc3RlcCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQgc3RlcC4KZnVuY3Rpb24gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpIHsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIGNvbnN0IHN0ZXBzID0gb3V0cHV0RWxlbWVudC5zdGVwczsKCiAgY29uc3QgbmV4dCA9IHN0ZXBzLm5leHQob3V0cHV0RWxlbWVudC5sYXN0UHJvbWlzZVZhbHVlKTsKICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5leHQudmFsdWUucHJvbWlzZSkudGhlbigodmFsdWUpID0+IHsKICAgIC8vIENhY2hlIHRoZSBsYXN0IHByb21pc2UgdmFsdWUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlIG5leHQKICAgIC8vIHN0ZXAgb2YgdGhlIGdlbmVyYXRvci4KICAgIG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSA9IHZhbHVlOwogICAgcmV0dXJuIG5leHQudmFsdWUucmVzcG9uc2U7CiAgfSk7Cn0KCi8qKgogKiBHZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJldHdlZW4gZWFjaCBhc3luYyBzdGVwIG9mIHRoZSB1cGxvYWQKICogcHJvY2Vzcy4KICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWQgRWxlbWVudCBJRCBvZiB0aGUgaW5wdXQgZmlsZSBwaWNrZXIgZWxlbWVudC4KICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIG91dHB1dCBkaXNwbGF5LgogKiBAcmV0dXJuIHshSXRlcmFibGU8IU9iamVjdD59IEl0ZXJhYmxlIG9mIG5leHQgc3RlcHMuCiAqLwpmdW5jdGlvbiogdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKSB7CiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CgogIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CiAgb3V0cHV0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsKCiAgY29uc3QgcGlja2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBpbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgcmVzb2x2ZShlLnRhcmdldC5maWxlcyk7CiAgICB9KTsKICB9KTsKCiAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgaW5wdXRFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsIHVwbG9hZCc7CiAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjYW5jZWwub25jbGljayA9ICgpID0+IHsKICAgICAgcmVzb2x2ZShudWxsKTsKICAgIH07CiAgfSk7CgogIC8vIENhbmNlbCB1cGxvYWQgaWYgdXNlciBoYXNuJ3QgcGlja2VkIGFueXRoaW5nIGluIHRpbWVvdXQuCiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9LCBGSUxFX0NIQU5HRV9USU1FT1VUX01TKTsKICB9KTsKCiAgLy8gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcGljayB0aGUgZmlsZXMuCiAgY29uc3QgZmlsZXMgPSB5aWVsZCB7CiAgICBwcm9taXNlOiBQcm9taXNlLnJhY2UoW3BpY2tlZFByb21pc2UsIHRpbWVvdXRQcm9taXNlLCBjYW5jZWxQcm9taXNlXSksCiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdzdGFydGluZycsCiAgICB9CiAgfTsKCiAgaWYgKCFmaWxlcykgewogICAgcmV0dXJuIHsKICAgICAgcmVzcG9uc2U6IHsKICAgICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICAgIH0KICAgIH07CiAgfQoKICBjYW5jZWwucmVtb3ZlKCk7CgogIC8vIERpc2FibGUgdGhlIGlucHV0IGVsZW1lbnQgc2luY2UgZnVydGhlciBwaWNrcyBhcmUgbm90IGFsbG93ZWQuCiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKCiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICBsaS5hcHBlbmQoc3BhbihmaWxlLm5hbWUsIHtmb250V2VpZ2h0OiAnYm9sZCd9KSk7CiAgICBsaS5hcHBlbmQoc3BhbigKICAgICAgICBgKCR7ZmlsZS50eXBlIHx8ICduL2EnfSkgLSAke2ZpbGUuc2l6ZX0gYnl0ZXMsIGAgKwogICAgICAgIGBsYXN0IG1vZGlmaWVkOiAkewogICAgICAgICAgICBmaWxlLmxhc3RNb2RpZmllZERhdGUgPyBmaWxlLmxhc3RNb2RpZmllZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbi9hJ30gLSBgKSk7CiAgICBjb25zdCBwZXJjZW50ID0gc3BhbignMCUgZG9uZScpOwogICAgbGkuYXBwZW5kQ2hpbGQocGVyY2VudCk7CgogICAgb3V0cHV0RWxlbWVudC5hcHBlbmRDaGlsZChsaSk7CgogICAgY29uc3QgZmlsZURhdGFQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7CiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7CiAgICB9KTsKICAgIC8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5LgogICAgbGV0IGZpbGVEYXRhID0geWllbGQgewogICAgICBwcm9taXNlOiBmaWxlRGF0YVByb21pc2UsCiAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgYWN0aW9uOiAnY29udGludWUnLAogICAgICB9CiAgICB9OwoKICAgIC8vIFVzZSBhIGNodW5rZWQgc2VuZGluZyB0byBhdm9pZCBtZXNzYWdlIHNpemUgbGltaXRzLiBTZWUgYi82MjExNTY2MC4KICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBmaWxlRGF0YS5ieXRlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZpbGVEYXRhLmJ5dGVMZW5ndGggLSBwb3NpdGlvbiwgTUFYX1BBWUxPQURfU0laRSk7CiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZmlsZURhdGEsIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CgogICAgICBjb25zdCBiYXNlNjQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICAgICAgeWllbGQgewogICAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgICBhY3Rpb246ICdhcHBlbmQnLAogICAgICAgICAgZmlsZTogZmlsZS5uYW1lLAogICAgICAgICAgZGF0YTogYmFzZTY0LAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPQogICAgICAgICAgYCR7TWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCl9JSBkb25lYDsKICAgIH0KICB9CgogIC8vIEFsbCBkb25lLgogIHlpZWxkIHsKICAgIHJlc3BvbnNlOiB7CiAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgIH0KICB9Owp9CgpzY29wZS5nb29nbGUgPSBzY29wZS5nb29nbGUgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYiA9IHNjb3BlLmdvb2dsZS5jb2xhYiB8fCB7fTsKc2NvcGUuZ29vZ2xlLmNvbGFiLl9maWxlcyA9IHsKICBfdXBsb2FkRmlsZXMsCiAgX3VwbG9hZEZpbGVzQ29udGludWUsCn07Cn0pKHNlbGYpOwo=",
       "headers": [
        [
         "content-type",
         "application/javascript"
        ]
       ],
       "ok": true,
       "status": 200,
       "status_text": ""
      }
     }
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 5666,
     "status": "ok",
     "timestamp": 1530931520737,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "DjN4D5Qc32Zg",
    "outputId": "d1f1994f-2c14-43e3-e8f5-b42504121e3b"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Birth Weight</th>\n",
       "      <th>Maternal Smoker</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>120</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>113</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>128</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1171</th>\n",
       "      <td>130</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1172</th>\n",
       "      <td>125</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1173</th>\n",
       "      <td>117</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1174 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Birth Weight  Maternal Smoker\n",
       "0              120            False\n",
       "1              113            False\n",
       "2              128             True\n",
       "...            ...              ...\n",
       "1171           130             True\n",
       "1172           125            False\n",
       "1173           117            False\n",
       "\n",
       "[1174 rows x 2 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "baby"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "W6MEn9BxFn4_"
   },
   "source": [
    "## Design\n",
    "\n",
    "We would like to see whether maternal smoking was associated with birth weight.  To set up our hypothesis test, we can represent the two views of the world using the following null and alternative hypotheses:\n",
    "\n",
    "**Null hypothesis:** In the population, the distribution of birth weights of babies is the same for mothers who don't smoke as for mothers who do. The difference in the sample is due to chance.\n",
    "\n",
    "**Alternative hypothesis:** In the population, the babies of the mothers who smoke have a lower birth weight, on average, than the babies of the non-smokers.\n",
    "\n",
    "Our ultimate goal is to make a decision between these two data generation models. One important point to notice is that we construct our hypotheses about the *parameters* of the data generation model rather than the outcome of the experiment. For example, we should not construct a null hypothesis such as \"The birth weights of smoking mothers will be equal to the birth weights of nonsmoking mothers\", since there is natural variability in the outcome of this process.\n",
    "\n",
    "The null hypothesis emphasizes that if the data look different from what the null hypothesis predicts, the difference is due to nothing but chance. Informally, the alternative hypothesis says that the observed difference is \"real.\"\n",
    "\n",
    "We should take a closer look at the structure of our alternative hypothesis. In our current set up, notice that we would reject the null hypothesis if the birth weights of babies of the mothers who smoke are significantly lower than the birth weights of the babies of the mothers who do not smoke. In other words, the alternative hypothesis encompasses/supports one side of the distribution. We call this a **one-sided** alternative hypothesis. In general, we would only want to use this type of alternative hypothesis if we have a good reason to believe that it is impossible to see babies of the mothers who smoke have a higher birth weight, on average."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To visualize the data, we've plotted histograms of the baby weights for babies born to maternal smokers and non-smokers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 294
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 377,
     "status": "ok",
     "timestamp": 1530931856749,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "QO9MCQ9-g37K",
    "outputId": "2eca7ed2-6d14-42e0-af34-a307527e72d0",
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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/vMfpKSkwNTUFB06dMBbb73FQoiIiIheCYKKoWbNmiEtLU3dsRARERFpnKDTZPb29pgxYwY2bNgAGxsbGBgYqGwPCwtTS3BERERE6iaoGBKLxfD09FR3LEREREQaJ6gYCgkJUXccRERERLWi0mJIJpPh66+/RnR0NPT19dG3b1+MHz9e5SrURERERPVdpQuoN2zYgM2bN6NDhw5o164dvv76ayxcuFCTsRERERGpXaUzQ/v27cPKlSvRt29fAEC/fv3g7++P+fPnQ0dHR2MBEhEREalTpTNDDx48QLt27ZSPu3btipKSEmRmZmokMCIiIiJNqLQYKikpga7uPxNHYrEY+vr6KCoq0khgRERERJog6KKLRERERK+qKt9av3fvXkgkEuVjmUyGqKgoNGzYUKWfj4+PeqIjIiIiUrNKi6GmTZvihx9+UGlr1KgR9u7dq9ImEolYDBEREVG9VWkxdPz4cU3GQURERFQruGaIiIiItBqLISIiItJqLIaIiIhIqwm6USsREdGLWBoXBl1dMUpK5AAUtR2OYJ+/E1jbIZAGcWaIiIiItBqLISIiItJqLIaIiIhIq7EYIiIiIq3GYoiIiIi0GoshIiIi0moshoiIiEirsRgiIiIircZiiIiIiLQaiyEiIiLSarwdBxHRK+5eprRW9y8SAYoq7sTRtJFEc8EQVYAzQ0RERKTVWAwRERGRVmMxRERERFqNxRARERFpNRZDREREpNVYDBEREZFWYzFEREREWo3FEBEREWk1FkNERESk1VgMERERkVZjMURERERajcUQERERaTXeqJWoDsiyOlrbITz3ZppERK8qzgwRERGRVmMxRERERFqNxRARERFpNRZDREREpNVYDBEREZFW47vJiIioVt3LlNZ2COUs2BoPAJg37p1ajoQ0QaMzQ1evXoWXlxccHR3h6emJCxcuVNhv69atcHFxQceOHTFjxgxIpf+8UA4ePIi+ffvCyckJfn5+yMzMVG5bsGAB2rVrBycnJ+XHvXv31H5cREREVH9prBgqLCyEv78/RowYgfj4eIwZMwYBAQEoKipS6RcTE4OIiAhs374dsbGxyMnJQXh4OADg2rVrmDdvHkJDQ3HmzBk0atQICxYsUD43KSkJq1atwvnz55UfTZs21dQhEhERUT2ksdNkcXFxEIvF8Pb2BgB4eXlh27ZtiImJwYAB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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a0e8c58d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(9, 6))\n",
    "smokers_hist = (baby.loc[baby[\"Maternal Smoker\"], \"Birth Weight\"]\n",
    "                .hist(normed=True, alpha=0.8, label=\"Maternal Smoker\"))\n",
    "non_smokers_hist = (baby.loc[~baby[\"Maternal Smoker\"], \"Birth Weight\"]\n",
    "                    .hist(normed=True, alpha=0.8, label=\"Not Maternal Smoker\"))\n",
    "smokers_hist.set_xlabel(\"Baby Birth Weights\")\n",
    "smokers_hist.set_ylabel(\"Proportion per Unit\")\n",
    "smokers_hist.set_title(\"Distribution of Birth Weights\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "8OYcXb54oFeB"
   },
   "source": [
    "The weights of the babies of the mothers who smoked seem lower on average than the weights of the babies of the non-smokers. Could this difference likely have occurred due to random variation? We can try to answer this question using a hypothesis test.\n",
    "\n",
    "To perform a hypothesis test, we assume a particular model for generating the data; then, we ask ourselves, what is the chance we would see an outcome as extreme as the one that we observed? Intuitively, if the chance of seeing the outcome we observed is very small, the model that we assumed may not be the appropriate model. \n",
    "\n",
    "In particular, we assume that the null hypothesis and its probability model, the **null model**, is true. In other words, we assume that the null hypothesis is true and focus on what the value of the statistic would be under under the null hypothesis. This chance model says that there is no underlying difference; the distributions in the samples are different just due to chance."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "8OYcXb54oFeB"
   },
   "source": [
    "## Test Statistic\n",
    "\n",
    "In our example, we would assume that maternal smoking has no effect on baby weight (where any observed difference is due to chance). In order to choose between our hypotheses, we will use the difference between the two group means as our **test statistic**.\n",
    "Formally, our test statistic is\n",
    "\n",
    "$$\\mu_{\\text{smoking}} - \\mu_{\\text{non-smoking}}$$\n",
    "\n",
    "so that small values (that is, large negative values) of this statistic will favor the alternative hypothesis. Let's calculate the observed value of test statistic:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 448,
     "status": "ok",
     "timestamp": 1530931938001,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "vj-c-gx-JEhx",
    "outputId": "e2074068-e896-4f15-b960-49a732d6f327"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-9.266142572024918"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonsmoker = baby.loc[~baby[\"Maternal Smoker\"], \"Birth Weight\"]\n",
    "smoker = baby.loc[baby[\"Maternal Smoker\"], \"Birth Weight\"]\n",
    "observed_difference = np.mean(smoker) - np.mean(nonsmoker)\n",
    "observed_difference"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "2IHi2y0MJLBX"
   },
   "source": [
    "If there were really no difference between the two distributions in the underlying population, then whether each mother was a maternal smoker or not should not affect the average birth weight. In other words, the label True or False with respect to maternal smoking should make no difference to the average.\n",
    "\n",
    "Therefore, in order to simulate the test statistic under the null hypothesis, we can shuffle all the birth weights randomly among the mothers. We conduct this random permutation below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "def shuffle(series):\n",
    "    '''\n",
    "    Shuffles a series and resets index to preserve shuffle when adding series\n",
    "    back to DataFrame.\n",
    "    '''\n",
    "    return series.sample(frac=1, replace=False).reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 204
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 278,
     "status": "ok",
     "timestamp": 1530931950175,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "XMm6MU4IoGQp",
    "outputId": "bdbeedc0-94f5-42d4-ec4a-d8d28aadb676"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Birth Weight</th>\n",
       "      <th>Maternal Smoker</th>\n",
       "      <th>Shuffled</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>120</td>\n",
       "      <td>False</td>\n",
       "      <td>122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>113</td>\n",
       "      <td>False</td>\n",
       "      <td>167</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>128</td>\n",
       "      <td>True</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1171</th>\n",
       "      <td>130</td>\n",
       "      <td>True</td>\n",
       "      <td>116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1172</th>\n",
       "      <td>125</td>\n",
       "      <td>False</td>\n",
       "      <td>133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1173</th>\n",
       "      <td>117</td>\n",
       "      <td>False</td>\n",
       "      <td>120</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1174 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Birth Weight  Maternal Smoker  Shuffled\n",
       "0              120            False       122\n",
       "1              113            False       167\n",
       "2              128             True       115\n",
       "...            ...              ...       ...\n",
       "1171           130             True       116\n",
       "1172           125            False       133\n",
       "1173           117            False       120\n",
       "\n",
       "[1174 rows x 3 columns]"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "baby[\"Shuffled\"] = shuffle(baby[\"Birth Weight\"])\n",
    "baby"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "NqD7ZmF0KwKL"
   },
   "source": [
    "## Conducting a Permutation Test\n",
    "\n",
    "Tests based on random permutations of the data are called **permutation tests**. In the cell below, we will simulate our test statistic many times and collect the differences in an array. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     }
    },
    "colab_type": "code",
    "id": "ntGb4QEkLA0D"
   },
   "outputs": [],
   "source": [
    "differences = np.array([])\n",
    "\n",
    "repetitions = 5000\n",
    "for i in np.arange(repetitions):\n",
    "    baby[\"Shuffled\"] = shuffle(baby[\"Birth Weight\"])\n",
    "  \n",
    "    # Find the difference between the means of two randomly assigned groups\n",
    "    nonsmoker = baby.loc[~baby[\"Maternal Smoker\"], \"Shuffled\"]\n",
    "    smoker = baby.loc[baby[\"Maternal Smoker\"], \"Shuffled\"]\n",
    "    simulated_difference = np.mean(smoker) - np.mean(nonsmoker)\n",
    "\n",
    "    differences = np.append(differences, simulated_difference)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We plot a histogram of the simulated difference in means below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 311
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 418,
     "status": "ok",
     "timestamp": 1530932216930,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "w93Fna2VMe0Y",
    "outputId": "3d765f17-8a68-4665-bc72-3be0873a8218",
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a0e28c3c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "differences_df = pd.DataFrame()\n",
    "differences_df[\"differences\"] = differences\n",
    "diff_hist = differences_df.loc[:, \"differences\"].hist(normed = True)\n",
    "diff_hist.set_xlabel(\"Birth Weight Difference\")\n",
    "diff_hist.set_ylabel(\"Proportion per Unit\")\n",
    "diff_hist.set_title(\"Distribution of Birth Weight Differences\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "HQpHlu91Mgfr"
   },
   "source": [
    "It makes intuitive sense that the distribution of differences is centered around 0 since the two groups should have the same average under the null hypothesis.\n",
    "\n",
    "In order to draw a conclusion for this hypothesis test, we should calculate the p-value. The empirical p-value of the test is the proportion of simulated differences that were equal to or less than the observed difference. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 363,
     "status": "ok",
     "timestamp": 1529212484422,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "Xeom2huvKI-d",
    "outputId": "96eb4525-6f45-431b-a964-d5cc81d7beeb"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p_value = np.count_nonzero(differences <= observed_difference) / repetitions\n",
    "p_value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "v5UT8SERKxL-"
   },
   "source": [
    "At the beginning of the hypothesis test we typically choose a p-value **threshold of significance** (commonly denoted as alpha). If our p-value is below our significance threshold, then we reject the null hypothesis. The most commonly chosen thresholds are 0.01 and 0.05, where 0.01 is considered to be more \"strict\" since we would need more evidence in favor of the alternative hypothesis to reject the null hypothesis.\n",
    "\n",
    "In either of these two cases, we reject the null hypothesis since the p-value is less than the significance threshold. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "_JeaVxxsoak0"
   },
   "source": [
    "## Bootstrap Confidence Intervals"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "S7xKWoIBMJ9V"
   },
   "source": [
    "Data scientists must often estimate an unknown population parameter using a random sample. Although we would ideally like to take numerous samples from the population to generate a sampling distribution, we are often limited to a single sample by money and time.\n",
    "\n",
    "Fortunately, a large, randomly collected sample looks like the original population. The bootstrap procedure uses this fact to simulate new samples by resampling from the original sample.\n",
    "\n",
    "To conduct the bootstrap, we perform the following steps:\n",
    "\n",
    "1. Sample with replacement from the original sample (now the bootstrap population). These samples are called bootstrap samples. We typically take thousands of bootstrap samples (~10,000 is common).\n",
    "1. Calculate the statistic of interest for each bootstrap sample. This statistic is called the bootstrap statistic, and the empirical distribution of these bootstrap statistics is an approximation to the sampling distribution of the bootstrapped statistic."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "PfRpxXKMU-Kk"
   },
   "source": [
    "![alt text](https://www.inferentialthinking.com/images/chapters/13/2/Bootstrap_25_0.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "9s-Ospg5QEie"
   },
   "source": [
    "We may use the bootstrap sampling distribution to create a confidence interval which we use to estimate the value of the population parameter. \n",
    "\n",
    "Since the birth weight data provides a large, random sample, we may act as if the data on mothers who did not smoke are representative of the population of nonsmoking mothers. Similarly, we act as if the data for smoking mothers are representative of the population of smoking mothers.\n",
    "\n",
    "Therefore, we treat our original sample as the bootstrap population to perform the bootstrap procedure:\n",
    "\n",
    "1. Draw a sample with replacement from the nonsmoking mothers and calculate the mean birth weight for these mothers. We also draw a sample with replacement from the smoking mothers and calculate the mean birth weight.\n",
    "1. Calculate the difference in means.\n",
    "1. Repeat the above process 10000 times, obtaining 10000 mean differences.\n",
    "\n",
    "This procedure gives us a empirical sampling distribution of differences in mean baby weights."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     }
    },
    "colab_type": "code",
    "id": "NYMJ2wmQocwX"
   },
   "outputs": [],
   "source": [
    "def resample(sample):\n",
    "    return np.random.choice(sample, size=len(sample))\n",
    "\n",
    "def bootstrap(sample, stat, replicates):\n",
    "    return np.array([\n",
    "        stat(resample(sample)) for _ in range(replicates)\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 311
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 41366,
     "status": "ok",
     "timestamp": 1530932636957,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "1yDXDkdzgM17",
    "outputId": "f8064df5-dc5d-4a9f-db66-16e3eceede56"
   },
   "outputs": [],
   "source": [
    "nonsmoker = baby.loc[~baby[\"Maternal Smoker\"], \"Birth Weight\"]\n",
    "smoker = baby.loc[baby[\"Maternal Smoker\"], \"Birth Weight\"]\n",
    "\n",
    "nonsmoker_means = bootstrap(nonsmoker, np.mean, 10000)\n",
    "smoker_means = bootstrap(smoker, np.mean, 10000)\n",
    "\n",
    "mean_differences = smoker_means - nonsmoker_means"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We plot the empirical distribution of the difference in means below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 311
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 41366,
     "status": "ok",
     "timestamp": 1530932636957,
     "user": {
      "displayName": "SHRISHTI JESWANI",
      "photoUrl": "//lh6.googleusercontent.com/-F3-bqFzSmIM/AAAAAAAAAAI/AAAAAAAAAGE/5BiAcZEFhzA/s50-c-k-no/photo.jpg",
      "userId": "108242849243362307040"
     },
     "user_tz": 420
    },
    "id": "1yDXDkdzgM17",
    "outputId": "f8064df5-dc5d-4a9f-db66-16e3eceede56",
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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ri4AIDg4GFu3bsXLly+xc+dOtGnTBj/++CP7PoWGhuKLL77Anj174O/vjwcPHkBbWxuffPIJWrduje+++w7Ozs4NMvRc3yiJKJnK5FH55VdV79694ezsDD8/P+jp6aFXr17o06cPBg0aVGubhoaG71yvra0t57GVlRVnSOt93Lt3Dy1btoSlpSWnvGfPnjh58iSkUilbZmxszP6/cg+gvLy8xna7du3KJhDgzZeOlZUV7t27V6cYXVxcEBgYCODNnlN2djZiY2MxZswY7Nmzp8Y+7NSpE6/2q9ar/MIsKSmpsb6zszO2b98OAEhMTMTnn3/OLuvduzeSkpIwbdo0JCcnc341p6Sk4ObNmzhy5IhMm2lpaTJJ5NatW7C1teUM271d5+34K19DbfHXVeV2X9teX03y8vLw7NkzREREICoqii2v3PNKT09nk0HV11GX51XdLoE3P5wqt8u7d+/ik08+YRMIALRv3559X1JSUvD48WP06NGD00ZJSQnS0tIAADNmzMD3338PJycndO/eHb169cKIESMoiZC6u337NgCwv1qratmyJbZu3Yq7d+/i7NmzuHDhAubNm4cDBw7g119/rbFNNTW1d65XJBJxHkulUnZIo+oXTKWq48HyYhgGIpEIQuH/jaqqqqpWW68upFJpte3URkNDg5MojI2NYW1tDUdHR+zevRvz58+v9nktW7bk1f7b/QvU/rp69eqFlStXIjMzE1euXMGUKVPYZb1798aePXtw584dvHz5knM8RCqVYvz48fh//+//ybRZ3V5CixYtOEm8LvHXp9u3b6NTp05ynYxRGf+8efOq3eOuuldY9f2qy/Nq2y5VVFTeGV+PHj2qPRW58gdQ//79cebMGZw9exZJSUnYt28ffvvtN0RGRsLBwaHW9hsbHRNRMnFxcejUqROsra1lll26dAkhISHo0qULfHx8EB0djaCgIJw6dQq5ubnvtd7KMfZKV69eZY/PqKiooKioiPOlV/WgIVB9oqlUeQD+33//lXk9n332mdwxm5mZ4fbt2ygqKmLLSkpKcOvWLXTu3FnudisJBAJIpVJeX7JVn1MfOnfujPbt22Pbtm1o0aIFevbsyS6r/FLZtWsXunbtyvkFbGpqioyMDBgaGrJ/ZWVlCAkJwdOnT2XWY25ujuvXr3Pe27evVWpoWVlZ+Oeff9ghpbrS1dWF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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a0e368fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mean_differences_df = pd.DataFrame()\n",
    "mean_differences_df[\"differences\"] = np.array(mean_differences)\n",
    "mean_diff = mean_differences_df.loc[:, \"differences\"].hist(normed=True)\n",
    "mean_diff.set_xlabel(\"Birth Weight Difference\")\n",
    "mean_diff.set_ylabel(\"Proportion per Unit\")\n",
    "mean_diff.set_title(\"Distribution of Birth Weight Differences\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, to construct a 95% confidence interval we take the 2.5th and 97.5th percentiles of the bootstrap statistics:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-11.36909646997882, -7.181670323140913)"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(np.percentile(mean_differences, 2.5), \n",
    " np.percentile(mean_differences, 97.5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This confidence interval allows us to state with 95% confidence that the population mean difference in birth weights is between -11.37 and -7.18 ounces."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary\n",
    "\n",
    "In this section, we review hypothesis testing using the permutation test and confidence intervals using the bootstrap. To conduct a hypothesis test, we must state our null and alternative hypotheses, select an appropriate test statistic, and perform the testing procedure to calculate a p-value. To create a confidence interval, we select an appropriate test statistic, bootstrap the original sample to generate an empirical distribution of the test statistic, and select the quantiles corresponding to our desired confidence level."
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "colab": {
   "collapsed_sections": [],
   "default_view": {},
   "name": "Hypothesis Testing.ipynb",
   "provenance": [],
   "version": "0.3.2",
   "views": {}
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  },
  "toc": {
   "nav_menu": {},
   "number_sections": false,
   "sideBar": false,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": true,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
